Learn R Programming

DescTools (version 0.99.37)

Between, Outside: Operators To Check, If a Value Lies Within Or Outside a Given Range

Description

The between and outside operators are used to check, whether a vector of given values x lie within a defined range (or outside respectively). The values can be numbers, text or dates. Ordered factors are supported.

Usage

x %()% rng
x %(]% rng
x %[)% rng
x %[]% rng

x %][% rng x %](% rng x %)[% rng x %)(% rng

Arguments

x

is a variable with at least ordinal scale, usually a numeric value, but can be an ordered factor or a text as well. Texts would be treated alphabetically.

rng

a vector of two values or a matrix with 2 columns, defining the minimum and maximum of the range for x. If rng is a matrix, x or rng will be recycled.

Value

A logical vector of the same length as x.

Details

The between operators basically combine two conditional statements into one and simplify so the query process. They are merely a wrapper for: x >= rng[1] & x <= rng[2], where the round bracket ( means "strictly greater than >" and the square bracket [ means ">=". Numerical values of x will be handled by C-code, which is significantly faster than two comparisons in R (especially when x is huge). . %][% is the negation of %()%, meaning all values lying outside the given range. Elements on the limits will return TRUE.

Both arguments will be recycled to the highest dimension, which is either the length of the vector or the number of rows of the matrix. See also the routines used to check, whether two ranges overlap (Overlap, Interval).

See Also

if, ifelse, Comparison, Overlap, Interval

Examples

Run this code
# NOT RUN {
x <- 1:9
x %[]% c(3,5)

# outside
x <- 1:9
x %][% c(3,5)

c(x,NA) %[]% c(3,5)

x %(]% c(3,5)

# no result when from > to:
x %[]% c(5,3)
x %(]% c(5,5)

# no problem:
ordered(x) %[]% c(3,5)

# not meaningful:
factor(x) %[]% c(3,5)

# characters
letters[letters %(]% c("d","h")]

data(d.pizza)
x <- levels(d.pizza$driver)
x %[]% c("C","G")

# select diamonds with a price between 2400 and 2510
data(d.diamonds)
d.diamonds[d.diamonds$price %[]% c(2400,2510),]

# use it with an ordered factor and select all diamonds with
#   symmetry between G (included) and X (excluded).
mean(d.diamonds[d.diamonds$symmetry %[)% c("G","X"),"price"])


# use multiple ranges
2 %[]% cbind(1:4,2:5)

# both arguments are recycled
c(2,3) %[]% cbind(1:4,2:5)
# }

Run the code above in your browser using DataLab